##
在本题中,我们用 $f_i$ 来表示第 $i$ 个斐波那契数($f_1=f_2=1,f_i=f_{i-1}+f_{i-2}(i\ge 3)$)。
给定一个 $n$ 个数的序列 $a$。有 $m$ 次操作,操作有两种:
- 将 $a_l\sim a_r$ 加上 $x$。
- 求 $\displaystyle\left(\sum_{i=l}^r f_{a_i}\right)\bmod (10^9+7)$。
$1\le n,m\le 10^5$,$1\le a_i\le 10^9$。
快速求$Fibonacci$第$n$项的方法是用矩阵乘法,即原始矩阵$\begin{pmatrix} 2\ 1 \end{pmatrix}$*$Fibonacci$矩阵$^{(n-2)}$,所以我们可以想到将$n$加上$k$相当于给$f[n]$乘上$Fibonacci$矩阵^$k$,所以我们可以想到线段树维护矩阵
对于第一个问题:由于矩阵具有分配律,即$a×b+a×c=a×(b+c)$,所以对于一段区间的矩阵可以相加维护。
对于第二个问题,显然将$[l,r]$的矩阵乘上转移矩阵的$x$次方即可。
用线段树维护即可
1 |
|